//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Paredes.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)
/*
Crea la pared sobre el eje x, empezando en (y = 0), hasta la altura max,
siempre con (z = 0), y el grosor de la pared se extiende hacia (z = -grosor)
*/
ParedVentana::ParedVentana(int ancho, int alto,int grosor){
     PV * p;
     Objeto3D *abajo, *derecha, * izquierda, *arriba;
     
   //parte inferior
     abajo=new Tablero(ancho, alto/3., grosor,divan,dival,divgr);
     objetos->anadir(abajo);

   //lateral izquierdo, si se mira desde dentro
     izquierda=new Tablero(ancho/3., alto/3., grosor,divan,dival,divgr);
     p=new PV(0,alto/3.,0,1);
     izquierda->marco_de_coordenadas->traslate(p);
     delete p;
     objetos->anadir(izquierda);

   //lateral derecho, si se mira desde dentro
     derecha=new Tablero(ancho/3., alto/3., grosor,divan,dival,divgr);
     p=new PV(((float)2.*ancho)/3.,alto/3.,0,1);
     derecha->marco_de_coordenadas->traslate(p);
     delete p;
     objetos->anadir(derecha);

   //parte superior
     arriba=new Tablero(ancho, alto/3., grosor,divan,dival,divgr);
     p=new PV(0,2*alto/3.,0,1);
     arriba->marco_de_coordenadas->traslate(p);
     delete p;
     objetos->anadir(arriba);

     p = new PV(-1,0,0,0);
     arriba->marco_de_coordenadas->rotate(90,p);
     abajo->marco_de_coordenadas->rotate(90,p);
     izquierda->marco_de_coordenadas->rotate(90,p);
     derecha->marco_de_coordenadas->rotate(90,p);
     delete p;

}
////////////////////////////////////////////////////////////////////////
/*
Crea la pared sobre el eje x, empezando en (y = 0), hasta la altura max,
siempre con (z = 0), y el grosor de la pared se extiende hacia (z = -grosor)
*/
ParedPuerta::ParedPuerta(int ancho, int alto,int grosor){
     PV * p;
     Objeto3D *derecha, * izquierda, *arriba;

   //lateral izquierdo, si se mira desde dentro
     izquierda=new Tablero(ancho/3., 2*alto/3., grosor,divan,dival,divgr);
     /*PV * p=new PV(0,alto/3.,0,1);
     izquierda->marco_de_coordenadas->traslate(p);
     delete p;*/
     objetos->anadir(izquierda);

   //lateral derecho, si se mira desde dentro
     derecha=new Tablero(ancho/3., 2*alto/3., grosor,divan,dival,divgr);
     p=new PV(((float)2.*ancho)/3.,0,0,1);
     derecha->marco_de_coordenadas->traslate(p);
     delete p;
     derecha->color->setR(1);    
     objetos->anadir(derecha);

   //parte superior
     arriba=new Tablero(ancho, alto/3., grosor,divan,dival,divgr);
     p=new PV(0,2*alto/3.,0,1);
     arriba->marco_de_coordenadas->traslate(p);
     delete p;
     arriba->color->setR(1);
     objetos->anadir(arriba);

     p = new PV(-1,0,0,0);
     arriba->marco_de_coordenadas->rotate(90,p);
     izquierda->marco_de_coordenadas->rotate(90,p);
     derecha->marco_de_coordenadas->rotate(90,p);
     delete p;

}
////////////////////////////////////////////////////////////////////////
Suelo::Suelo(int ancho, int alto,int grosor,int nbaldosas){

      ObjetoCompuesto3D * obj;
      Tablero *baldosita;
      bool blanco = true;
      PV * colocacion = new PV(-1,0,0,0);

      for(int i = 0; i < nbaldosas; i++){
         if(nbaldosas % 2 == 0)
                blanco = !blanco;
         for(int j = 0; j < nbaldosas; j++){
            obj = new ObjetoCompuesto3D();
            baldosita = new Tablero(ancho/(double)nbaldosas,
                                    alto/(double)nbaldosas,
                                    grosor,
                                    2,2,2);
            baldosita->marco_de_coordenadas->rotate(90,colocacion);
            obj->getObjetos()->anadir(baldosita);
            if(blanco){
                obj->color->set(0.85,0.85,0.85);
            }else{
                obj->color->set(0.04,0.04,0.04);
            }
            PV * traslado = new PV(i*ancho/(double)nbaldosas,j*alto/(double)nbaldosas,0,0);
            obj->marco_de_coordenadas->traslate(traslado);
            delete traslado;
            this->objetos->anadir(obj);
            blanco = !blanco;
        }
      }
      delete colocacion;



}

